package main

import "fmt"

func main() {
	/*
		字符串：
		1.概念：多个 byte 的集合，理解为一个字符序列

		2.语法：使用双引号
			"abc","hello","A"
				也可以使用``(和波浪线在一起的符号)

		3.编码问题
				计算机本质只识别 0 和 1
				A：65，B：66，C：67...
				a：97，b：98...
			ASCII(美国标准信息交换码)

			中国的编码表：gbk，兼容ASCII
				中
				家
			Unicode编码表：号称统一了全世界
				UTF-8，UTF-16，UTF-32...

			Go语言统一使用 UTF-8编码

		4.转义字符：\
			A：有一些字符，有特殊的作用，可以转以为普通的字符
				\",\'
			B：有一些字符，就是一个普通的字符，转义后有特殊的作用
				\n 换行
				\t 制表符

		注：字符串的尾部不包含null字符（'\0'）
			基于字符串创建的切片和原字符串指向相同的底层字符数组，
				对字符串的切片操作，返回的子串仍是 string，而非 slice
	*/
	//1. 定义字符串
	var s1 string
	s1 = "张三"
	fmt.Printf("%T,%s\n", s1, s1)

	s2 := `Hello World`
	fmt.Printf("%T,%s\n", s2, s2)

	//2. 区别：'A',"A"
	v1 := 'A'
	v2 := "A"
	fmt.Printf("%T,%d\n", v1, v1) // int32,65
	fmt.Printf("%T,%s\n", v2, v2) // string,A

	v3 := '中'
	fmt.Printf("%T,%d,%c,%q\n", v3, v3, v3, v3) //int32,20013,中,'中'

	//3. 转义字符
	fmt.Println("\"Hello World\"")
	fmt.Println("Hello\tWorld") // Hello   World

	fmt.Println("He`lloWor`ld")
	fmt.Println(`H~e"llo~Wor"l^d`)
}
